package com.woniu.p2p.utils;

import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpException;
import org.apache.commons.httpclient.NameValuePair;
import org.apache.commons.httpclient.methods.PostMethod;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;

import java.io.IOException;

public class SMSTool {
	private static final String SMS_URL = "http://106.ihuyi.com/webservice/sms.php?method=Submit";//互亿无线短信接口请求地址
	private static final String SMS_APIID = "C48953166"; //查看用户名 登录用户中心->验证码通知短信>产品总览->API接口信息->APIID
	private static final String SMS_APIKEY = "a01b6b8207538cfed6d797250377b762";//查看密码 登录用户中心->验证码通知短信>产品总览->API接口信息->APIKEY

	/**
	 *     发送并返回验证码
	 * @param mobile  用户输入的手机号码（接收验证码的手机）
	 * @return 验证码
	 */
	public static String getCode(String mobile){
		if (mobile == null || "".equals(mobile)) {
			return null;
		}
		HttpClient client = new HttpClient();  // HTTP客户端程序
		PostMethod method = new PostMethod(SMS_URL);
		client.getParams().setContentCharset("GBK");
		method.setRequestHeader("ContentType","application/x-www-form-urlencoded;charset=GBK");
		//验证码内容: 随机产生6位数字的验证码【程序员自己定义】
		int mobileCode = (int)((Math.random()*9+1)*100000);
		//短信模板
		String content = new String("您的验证码是：" + mobileCode + "。请不要把验证码泄露给其他人。");
        //封装以上短信认证参数
		NameValuePair[] data = {
			    new NameValuePair("account", SMS_APIID),
			    new NameValuePair("password", SMS_APIKEY),
			    new NameValuePair("mobile", mobile),
			    new NameValuePair("content", content),
		};
		method.setRequestBody(data);  // 将认证参数添加在请求头携带
		try {
			client.executeMethod(method);  // 发送请求到第三方接口
			String result =method.getResponseBodyAsString(); // 获取响应正文
			Document doc = DocumentHelper.parseText(result); // 将字符串正文转换成文档树
			Element root = doc.getRootElement();
			String code = root.elementText("code"); // 在DOM树中找到code文本节点
			if("2".equals(code)){ // code响应状态码（2：查询成功）：用来判断是否发送成功的标志
				System.out.println(mobile+"发送短信成功，验证码："+mobileCode);
				return String.valueOf(mobileCode); // 将验证码返回客户端
			}
		} catch (HttpException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} catch (DocumentException e) {
			e.printStackTrace();
		}
		return null;
	}
}
